package q1652_decrypt;

public class Solution_2 {
    /*
    但是此类题一般还有一种拼接数组的方式，因为涉及到循环的过程
    所以拼接一个2n的数组，然后用前缀和也能够解决
     */
    public int[] decrypt(int[] code, int k) {
        int n = code.length;
        if (k == 0) {
            return new int[n];
        }
        int[] preSum = new int[n * 2 + 1];
        for (int i = 1; i <= n * 2; i++) {
            preSum[i] = preSum[i - 1] + code[(i - 1) % n];
        }
        int[] ans = new int[n];
        if (k > 0) {
            for (int i = 0; i < n; i++) {
                ans[i] = preSum[i + k + 1] - preSum[i + 1];
            }
        } else {
            for (int i = 0; i < n; i++) {
                ans[i] = preSum[i + n] - preSum[i + k + n];
            }
        }
        return ans;
    }
}
